package app

import (
	"dtf/service_control_center/functions"
	"encoding/json"
	"errors"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/gfile"
	"time"
)

/*
	报文对象及码表常量
*/

/* 用于TAgentMessage中内置的Command字段的常量，运行内置功能 */

const Cmd_QueryAgentConfig = "101001" //查询AgentConfig信息
const Cmd_QuerySupporTasks = "101002" //查询Agent支持的任务信息

// TAgentMessage 命令报文结构
type TAgentMessage struct {
	MessageId string    `json:"messageId"` //消息ID，用于异步比对
	Command   string    `json:"command"`   //命令字
	Params    g.Map     `json:"params"`    //参数内容
	Topic     string    `json:"topic"`     //发送主题，用于校验
	Sender    string    `json:"sender"`    //发送者标识，用于校验
	SendTime  time.Time `json:"sendTime"`  //发送时间
}

// TNotifyMessage 通知消息结构
type TNotifyMessage struct {
	MessageId string    `json:"messageId"` //消息ID，用于异步比对
	Payload   g.Map     `json:"payload"`   //参数内容
	Topic     string    `json:"topic"`     //发送主题，用于校验
	Sender    string    `json:"sender"`    //发送者标识，用于校验
	SendTime  time.Time `json:"sendTime"`  //发送时间
	EventName string    `json:"event"`     //事件名称
}

// Export 输出JSON字符串
func (tnm *TNotifyMessage) Export() string {
	mJson := gjson.New(tnm)
	return mJson.Export()
}

// Export 输出JSON字符串
func (tam *TAgentMessage) Export() string {
	mJson := gjson.New(tam)
	return mJson.Export()
}

// Encrypt 加密后输出字符串
func (tam *TAgentMessage) Encrypt(APemFile string) (string, error) {
	if gfile.Exists(APemFile) == true {
		mStr := tam.Export()
		mR := functions.RSA_Encrypt([]byte(mStr), APemFile)
		return string(mR), nil
	} else {
		return "", errors.New("pem file not found")
	}
}

// Decrypt 解密后导入数据
func (tam *TAgentMessage) Decrypt(AInString string, APemFile string) error {
	if gfile.Exists(APemFile) == true {
		mOut := functions.RSA_Decrypt([]byte(AInString), APemFile)
		mEr := json.Unmarshal(mOut, tam)
		return mEr
	} else {
		return errors.New("pem file not found")
	}
}
